#include "../../include/client_handle.h"

/***************************************************
函数名:log_user
功能:用户登录
传入参数:struct message *a
返回值:无
***************************************************/
void log_user(struct message *a)
{
    	do
    	{
	        printf("请输入用户名（10字以内）:\n");
	        memset((*a).name,0,strlen((*a).name));
	    	scanf("%s",(*a).name);
	    	my_strcpy(locname,(*a).name);
		printf("请输入密码（20位以内）:\n");
		memset((*a).msg,0,strlen((*a).msg));
		scanf("%s",(*a).msg);
    	}while(strlen((*a).name)>20 || strlen((*a).msg)>20);
 	        my_strcpy((*a).flag,"login");
		my_send(sockfd,a,sizeof(*a),0);                 //向服务器发送登录信息
		printf("正在登录，请稍等……\n");
		my_recv(sockfd,a,sizeof(*a),0);
		printf("recv the message from server:%s\n",(*a).msg);
}
/***************************************************
函数名:login_success
功能:登录成功进入聊天模式
传入参数:struct message *a
返回值:退出返回0，否则返回1
***************************************************/
int login_success(struct message *a)
{
	char str[MAXLEN];
    	char buf[MAXLEN];
   	 time_t timep;
   	 pthread_t pid;
   	 sprintf(chat_log,"%s.txt",(*a).name);
   	 if((fd=my_open(chat_log,O_RDWR|O_CREAT|O_APPEND,0777)) < 0)
   	 {
        	printf("打开聊天记录失败!");
		exit(1);
   	 }
   	 pthread_create(&pid,NULL,(void*)handlerecvmsg,(void *)&sockfd);         //创建接受消息线程
   	 setbuf(stdin,NULL);
   	 //默认情况为群发
   	 my_strcpy((*a).flag,"all");
  	 printf("尊敬的%s你好，如需帮助请输入：.help\n",locname);
 	 while(1)
	 {
		memset((*a).msg,0,strlen((*a).msg));
		memset(str,0,strlen(str));
		usleep(100000);
		printf("TO %s:\n",(*a).flag);
		setbuf(stdin,NULL);
		gets(str);
		if(OK == help(str))                      //提示信息  
		{
		    continue;
		}
		my_strcpy((*a).name,locname);
		my_strcpy(buf,(*a).flag);
		cutStr(str,(*a).flag,15,(*a).msg,MAXLEN,'$');    //调用字符切割函数  
		expression((*a).name,(*a).msg);               //表情替换函数 
		common_use_words((*a).msg);                    //常用语使用函数
		if(my_strcmp((*a).flag,"exit") == 0)
		{
		    return FAULT;
		}
		if(my_strcmp((*a).flag,"view") == 0)           
		{
		    my_send(sockfd,a,sizeof((*a)),0);       //请求查看在线用户
	     	    my_strcpy((*a).flag,buf);
		    continue;
		}
		if(my_strcmp((*a).flag,"all") == 0)
		{
		    my_send(sockfd,a,sizeof(*a),0);        
		    continue;
		}
	        if ((my_strcmp((*a).flag,"trans") == 0) && (savefilefd <=0))
		{
    		    if ((my_strcmp((*a).msg,"agree") == 0) && (savefilefd == 0))
		    {
		        char savefilename[MAXLEN];
			my_strcpy((*a).addressee,filefromuser);
			printf("请输入你想保存的文件名：\n");
			do
			{
			    setbuf(stdin,NULL);
			    gets(savefilename);
			    savefilefd = open(savefilename,O_RDWR|O_CREAT|O_EXCL,0777);
			    if(savefilefd == -1)
			    {
			        printf("文件已存在，你重新输入：\n");
			    }
			}while(savefilefd == -1);
			if(savefilefd < 0)
			{
			    printf("接收文件失败!\n");
			    savefilefd = -1;
			}
			else
			{
			    my_strcpy((*a).msg,"agree");
			    my_send(sockfd,a,sizeof(*a),0);
			    printf("文件接收中……\n");
			}
		}
		else
		{
			memset(str,0,strlen(str));
			cutStr((*a).msg,(*a).addressee,20,str,MAXLEN,'$');
			if (str[0] != '\0' && (*a).addressee[0] != '\0')
			{
				char transfileallname[22];
				sprintf(transfileallname,"./%s",str);
				savefilefd = open(str,O_RDWR,0666);
				if(savefilefd < 0)
				{
					printf("打开文件失败!\n");					
					savefilefd = -1;
				}else
				{
					memset((*a).msg,0,strlen((*a).msg));	
					my_strcpy((*a).msg,str);
					my_send(sockfd,a,sizeof(*a),0);
					}
				}
			else
			{
				my_strcpy((*a).msg,"disagree");
				my_strcpy((*a).name,locname);
				my_strcpy((*a).addressee,filefromuser);
				my_send(sockfd,a,sizeof(*a),0);
			}
		}
			my_strcpy((*a).flag,buf);
			continue;
		}
		if (my_strcmp((*a).flag,"trans") == 0)
		{
			my_strcpy((*a).flag,buf);
		}
		else
		{
			my_strcpy(buf,(*a).flag);
			my_strcpy((*a).addressee,(*a).flag);
			my_strcpy((*a).flag,"personal");
			my_send(sockfd,a,sizeof(*a),0);             //发送私信
			my_strcpy((*a).flag,buf);
			time (&timep);
			memset(str,0,strlen(str));
			sprintf(str,"%s你对 %s 说: %s\n",ctime(&timep),(*a).flag,(*a).msg);
			printf("%s",str);
			my_write(fd,str,strlen(str));              //写入聊天记录文件中
		}
	}
	return OK;
}


